Repository navigation
feat: launch coding agents with Pulsing companions - #80
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
Add
pulsing -- codexfor mailbox-based collaboration between coding-agent sessions. Each invocation gets one supervised Pulsing companion, and each native agent/subagent gets a separate bounded in-memory mailbox bound to harness-provided MCP thread metadata. No separate mailbox service is required.Both machines use the same configuration:
The machine owning the seed IP listens there automatically. Other machines select their source interface from the route to the seed and bind an available port. The seed is a network entry point, not a central mailbox store.
Implementation
SEED=1remain supported._meta.threadId; reject missing metadata instead of sharing a parent identity. Route remote deliveries through Pulsing actor discovery.python -m pulsing.mailbox replay LOG... --format json|markdown --output NEWFILEfor offline inspection. Detect sequence gaps, conflicting duplicate events and malformed/truncated records. Replay does not spawn actors, rerun tools or resume models.--runtime-dirfor process rendezvous and logs; retain--state-diras an alias only. Logging is synchronous and observational, not an atomic distributed journal or crash-recovery protocol. Log I/O failures surface to callers; retention remains operator-managed.--audit-log/PULSING_AUDIT_LOGMCP request/response auditing with known credential fields fingerprinted and authorization headers omitted.Validation of the current in-memory implementation
.venv/bin/pytest tests/python --ignore=tests/python/test_chaos.py -q: 688 passed, 16 skipped..venv/bin/ruff check python tests examples: passed..venv/bin/python examples/python/mailbox_collaboration.py: passed with real actors and deterministic roles.uv pipbecause the development venv has no pip module.docs/src/design/fermat-council-results.md..venv/bin/pytest tests/python/mailbox -qpassed (73 passed);git diff --checkand relative Markdown link validation passed. The full Python suite above belongs to the implementation validation; it was not rerun for the documentation-only change. The documentation site build was not run.Historical real-model evidence — previous SQLite implementation only
Before the memory refactor, two Codex roots with ten native subagents each exercised MCP identity injection and free peer messaging. A 600-second discussion produced 206 messages, 170 direct peer messages, 90 cross-instance peer messages and 1,321 MCP calls without recorded transport/tool errors. These historical observations do not validate the current memory backend. Private runtime conversations, databases, credentials and audit archives are not included.
Existing aggregate-check limitation
PATH="$PWD/.venv/bin:$PATH" just checkpasses Rust formatting, then stops because unchangedexamples/python/README.mdcode blocks need formatting under the installed Ruff version. The same file-level failure was reproduced fromorigin/main. No unrelated formatting cleanup is included. The aggregate command did not reach Rust Clippy/tests; those were not run separately. Python lint/tests were run independently above.Scope and limitations
Review entry points
python/pulsing/cli/launch.pyandpython/pulsing/cli/network.py: process lifecycle and network planning.python/pulsing/mailbox/companion.py: per-thread binding and distributed lookup.python/pulsing/mailbox/actors.py,events.py,replay.py: RAM state and offline observations.tests/python/mailbox/test_launcher.py,test_mcp_stdio.py,test_replay.py: process, restart and log checks.docs/src/design/fermat-council-experiment.md,examples/python/fermat_council.jsonanddocs/src/design/fermat-council-results.md: experiment design, role/phase configuration, measured results and protocol deviations.Relates to #79.